//import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import java.io.StringReader;
import java.util.*;

public class xml
{
	public static void main (String[] args)
	{

		/*
		String xml_text = 
			"<raiz>"+
			"<etiqueta>dato1</etiqueta>"+
			"<etiqueta>dato2</etiqueta>"+
			"<etiqueta>dato3</etiqueta>"+
			"<etiqueta>dato4</etiqueta>"+
			"</raiz>";*/
		//String xml_text = "<comando>lista_de_partidas</comando>";
		//String xml_text = "<crear_partida><nombre>nombre</nombre></crear_partida>";
		
		String xml_text = 
			"<estado_de_partida>" +
			 "<nave_del_cliente>" +
			  "<angulo>90</angulo>" +
			  "<x>34</x>" +
			  "<y>3</y>" +
			  "<estado>explotando</estado>" +
			 "</nave_del_cliente>" +
			 "<actor>" +
			  "<tipo>nave</tipo>" +
			  "<angulo>180</angulo>" +
			  "<x>3</x>" +
			  "<y>2</y>" +
			  "<estado>explotando</estado>" +
			 "</actor>" +
			 "<actor>" +
			  "<tipo>nave</tipo>" +
			  "<angulo>180</angulo>" +
			  "<x>3</x>" +
			  "<y>2</y>" +
			  "<estado>explotando</estado>" +
			 "</actor>" +
			"</estado_de_partida>";

		/*String xml_text = "<teclas><izquierda>false</izquierda><derecha>false</derecha><adelante>false</adelante><atras>false</atras><espacio>false</espacio><escape>false</escape></teclas>";*/


		parsearEstadoDePartida (xml_text);
		
		/*	
		Document doc = null;
		try 
		{
			DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance();
			DocumentBuilder dbuilder = bf.newDocumentBuilder();
			InputSource is = new InputSource (new StringReader(xml_text));
			doc = dbuilder.parse (is);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		if (doc != null)
		{	
			//org.w3c.dom.NodeList nl = doc.getElementsByTagName ("comando");
			//System.out.println (nl.getLength());
			//org.w3c.dom.Node n = nl.item(0);
			///Node n2 = nl.item(0);
			///NodeList nl2 = n2.getChildNodes ();

			///System.out.println (">" + ((Node)nl2.item(0)).getNodeValue () + "<");
			//System.out.println (n2.getNodeValue ());
			//System.out.println (n.getNodeValue());
			//System.out.println (((org.w3c.dom.Text)n).getData());
			
			Node teclas = doc.getDocumentElement();
			NodeList nodeListTeclas = teclas.getChildNodes();
			for (int i = 0; i < nodeListTeclas.getLength(); i++)
			{
				Node nodoTecla = nodeListTeclas.item(i);
				NodeList nodo1 = nodoTecla.getChildNodes();
				Node nodo2 = nodo1.item (0);

				System.out.println (nodo2.getNodeValue());
			}
			*/

			///////////////////////////////////////////////////
			/*
			Node nodo = (Node)doc.getDocumentElement();
			NodeList nl = nodo.getChildNodes();
			Node n2 = nl.item(0);
			NodeList nl2 = n2.getChildNodes();
			n2 = nl2.item(0);
			System.out.println(nodo.getNodeName());
			System.out.println (n2.getNodeValue());
			*/
			///////////////////////////////////////////////////
		//}
	}

	static void parsearEstadoDePartida(String xml_text)
	{
		List<DatosActor> naves;
		List<DatosActor> asteroides;
		List<DatosActor> balas;
		DatosActor naveCliente;

		naves = new ArrayList();
		asteroides = new ArrayList();
		balas = new ArrayList();

		Document doc = null;
		try 
		{
			DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance();
			DocumentBuilder dbuilder = bf.newDocumentBuilder();
			InputSource is = new InputSource (new StringReader(xml_text));
			doc = dbuilder.parse (is);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		if (doc != null)
		{
			Node estadoPartida = (Node)doc.getDocumentElement();
			System.out.println(estadoPartida.getNodeName());
			NodeList actores = estadoPartida.getChildNodes();
			for (int i = 0; i < actores.getLength(); i++)
			{
				Node actor = actores.item (i);
				if (actor.getNodeName().equals("nave_del_cliente"))
				{
					System.out.println ("nave");
					NodeList nlNave = actor.getChildNodes();

					int x = 0;
					int y = 0;
					int angulo = 0;
					String estado = "";

					for (int j = 0; j < nlNave.getLength(); j++)
					{
						Node dato = nlNave.item (j);
						System.out.print ("- " + dato.getNodeName());
						NodeList nl = dato.getChildNodes();
						Node valor = nl.item(0);
						System.out.println (" " + valor.getNodeValue());
						naveCliente = new DatosActor();
						if (dato.getNodeName().equals("angulo"))
							angulo = (new Integer(valor.getNodeValue())).intValue();
						if (dato.getNodeName().equals("x"))
							x = (new Integer(valor.getNodeValue())).intValue();
						if (dato.getNodeName().equals("y"))
							y = (new Integer(valor.getNodeValue())).intValue();
						if (dato.getNodeName().equals("estado"))
							estado = valor.getNodeValue();
					}
					naveCliente = new DatosActor (x, y, angulo, estado);
					naveCliente.setNCliente(true);
				}
				if (actor.getNodeName().equals("actor"))
				{
					System.out.println ("actor");
					NodeList nlActor = actor.getChildNodes();

					int x = 0;
					int y = 0; 
					int angulo = 0;
					String estado = "";
					String tipo = "";

					for (int j = 0; j < nlActor.getLength(); j++)
					{
						Node dato = nlActor.item (j);
						System.out.print ("- " + dato.getNodeName());
						NodeList nl = dato.getChildNodes();
						Node valor = nl.item(0);
						System.out.println (" " + valor.getNodeValue());
						//-------------------------------------------------------
						
						if (dato.getNodeName().equals("angulo"))
							angulo = (new Integer(valor.getNodeValue())).intValue();
						if (dato.getNodeName().equals("x"))
							x = (new Integer(valor.getNodeValue())).intValue();
						if (dato.getNodeName().equals("y"))
							y = (new Integer(valor.getNodeValue())).intValue();
						if (dato.getNodeName().equals("estado"))
							estado = valor.getNodeValue();
						if (dato.getNodeName().equals("tipo"))
							tipo = valor.getNodeValue();
					}
					if (tipo.equals ("nave"))
						naves.add(new DatosActor(x, y, angulo, estado));
					if (tipo.equals ("asteroide"))
						naves.add(new DatosActor(x, y, angulo, estado));
					if (tipo.equals ("bala"))
						naves.add(new DatosActor(x, y, angulo, estado));
				}
			}
		} 
	}

	/*
	void identificarXml(String xml_text)
	{

		Document doc = null;
		try 
		{
			DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance();
			DocumentBuilder dbuilder = bf.newDocumentBuilder();
			InputSource is = new InputSource (new StringReader(xml_text));
			doc = dbuilder.parse (is);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		if (doc != null)
		{	/*
			//org.w3c.dom.NodeList nl = doc.getElementsByTagName ("comando");
			System.out.println (nl.getLength());
			//org.w3c.dom.Node n = nl.item(0);
			Node n2 = nl.item(0);
			NodeList nl2 = n2.getChildNodes ();
			System.out.println (">" + ((Node)nl2.item(0)).getNodeValue () + "<");
			//System.out.println (n2.getNodeValue ());
			//System.out.println (n.getNodeValue());
			//System.out.println (((org.w3c.dom.Text)n).getData());
			*/
			//Node nodo = (Node)doc.getDocumentElement();
			//NodeList nl = nodo.getChildNodes();
			//System.out.println (nodo.getNodeName());
	/*
			NodeList nl = doc.getElementsByTagName("nombre");
			Node nodo_nombre = nl.item(0);
			System.out.println (nodo_nombre.getNodeValue());

		}

	}
*/
}
